Skip to content

Mixer: prevent duplicate app identities and routing resets - #61

Merged
emaspa merged 1 commit into
mainfrom
fix/balatro-app-identity
Sep 8, 2026
Merged

Mixer: prevent duplicate app identities and routing resets#61
emaspa merged 1 commit into
mainfrom
fix/balatro-app-identity

Conversation

@emaspa

@emaspa emaspa commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Balatro registered twice: its PipeWire client produced the identity balatro, assigned to Game, while its playback node omitted the process binary and produced Balatro.exe, assigned to System. The saved alias could also overwrite the canonical routing choice when settings were restored.

Playback metadata now falls back to the owning client from the same graph snapshot. Direct Windows executable identities use the same normalization as Wine/Proton identities. Restoring overrides prefers an existing canonical entry over a conflicting legacy alias, and assigning or forgetting an executable alias addresses the canonical app. Saved inactive entries show the resolved override as well.

Validation:

  • A reduced capture of the live Balatro graph reproduced the identity mismatch and lost override. The new tests cover client/node consistency, node-property precedence, missing clients, executable aliases, override order, legacy-only and unmanaged choices, native apps sharing a generic label, distinct Windows games, and app assignment/forgetting through the mixer.
  • All 310 .NET tests passed. Locked restore and native-enabled Release build passed with zero warnings and errors.
  • Native editor regressions, five plugin tests, syntax/manifest checks, ShellCheck, version, locked restore, OpenAPI, RPM and diff checks passed.
  • Confirmed the reported problem was real routing: the single Balatro playback stream was on OpenXLR_ch_system. After deployment and daemon restart, ten consecutive checks showed one active balatro entry and its actual playback stream on OpenXLR_ch_game. Saved settings contain one canonical Balatro row and override. Existing insert definitions and parameters were preserved, and inserts reported no errors.

The change affects application discovery and routing. Different native binaries retain distinct identities even when their display labels match.

Use the owning PipeWire client for application metadata missing from playback nodes. Normalize executable identities consistently at discovery, restore and app commands. Prefer an existing canonical override over a stale alias so a duplicate entry cannot move a game back to System after restart. Add captured-graph and override migration regressions.
@emaspa
emaspa merged commit 1783ad0 into main Sep 8, 2026
4 checks passed
@emaspa
emaspa deleted the fix/balatro-app-identity branch September 9, 2026 06:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant